import axios from 'axios'
import { getToken } from '@/utils/auth'

import { ElMessage } from 'element-plus'
import 'element-plus/es/components/message/style/css'

axios.defaults.baseURL = import.meta.env.VITE_APP_BASE_API
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 使用自定义配置新建一个 axios 实例
const instance = axios.create({
    baseURL: axios.defaults.baseURL,
    timeout: 1000,
    headers: axios.defaults.headers
})
//----在请求或响应被 then 或 catch 处理前拦截它------------

// 添加请求拦截器
instance.interceptors.request.use(
    // 在发送请求之前做些什么
    (config) => {
        //如果headers 为空会转为空对象
        let headers = config.headers || {}
        //判断是否需要添加token
        if (!headers.isToken && getToken()) {
            config.headers['Authorization'] = 'Bearer ' + getToken()
        }
        //打印入参,仅供调试,否则敏感信息答应有风险
        // let param
        // if (config.method === 'get') {
        //     if (config.params) {
        //         param = config.params
        //     }
        // } else {
        //     if (config.data) {
        //         param = config.data
        //     }
        // }
        // if (param) {
        //     console.log(config.url, '请求入参:', param)
        // }
        return config
    },
    // 对请求错误做些什么
    (error) => {
        Promise.reject(error)
    }
)

// 添加响应拦截器
instance.interceptors.response.use(
    (response) => {
        // 对响应数据做点什么
        // console.log('resp:' + JSON.stringify(response, null, 2))
        if (response.data) {
            const { data } = response
            const code = data.code || 1
            const msg = data.msg || '未知错误'
            if (code !== 1) {
                // 对响应错误做点什么
                console.error('请求后台接口返回错误:', msg)
                ElMessage.error(msg)
            } else {
                return data
            }
        }
    },
    (error) => {
        console.error(
            '请求后台接口错误:',
            (error && error.response && error.response.data && error.response.data.msg) ||
                error.message
        )
        // 对响应错误做点什么
        if (error && error.response) {
            const status = error.response.status
            switch (status) {
                case 400:
                    ElMessage.error('请求错误')
                    break
                case 401:
                    ElMessage.error('未授权，请重新登录')
                    break
                case 403:
                    ElMessage.error('登录过期，请重新登录')
                    break
                case 404:
                    ElMessage.error('请求错误，未找到相应的资源')
                    break
                case 408:
                    ElMessage.error('请求超时')
                    break
                case 500:
                    ElMessage.error('服务器错误')
                    break
                case 504:
                    ElMessage.error('网络超时')
                    break
                default:
                    ElMessage.error('请求失败')
            }
        }
        return Promise.reject(error)
    }
)

export default instance
